package leetcode.hot100;

import leetcode.common.TreeNode;

@SuppressWarnings("all")
public class _98_验证二叉搜索树_精简递归 {

    // 给定一个二叉树，判断其是否是一个有效的二叉搜索树
    public boolean isValidBST(TreeNode root) {
        return isValid(root);
    }

    // 利用中序遍历，当前遍历到的结点一定要大于等于其前驱结点的值
    long prevVal = Long.MIN_VALUE;

    private boolean isValid(TreeNode root) {
        if (root == null) return true;
        // 判断左子树是否满足二叉搜索树
        if (!isValid(root.left)) {
            return false;
        }
        // 判断当前结点与前驱结点的大小关系
        if (root.val <= prevVal) return false;
        prevVal = root.val;
        // 判断右子树是否满足二叉搜索树
        return isValid(root.right);
    }
}
